/**
 * 简易HTTP服务器
 * 用于在本地运行项目并允许局域网访问
 */
const http = require('http');
const fs = require('fs');
const path = require('path');
const os = require('os');

// 端口配置
const PORT = 3000;

// MIME类型映射
const MIME_TYPES = {
    '.html': 'text/html',
    '.css': 'text/css',
    '.js': 'text/javascript',
    '.json': 'application/json',
    '.png': 'image/png',
    '.jpg': 'image/jpeg',
    '.jpeg': 'image/jpeg',
    '.gif': 'image/gif',
    '.svg': 'image/svg+xml',
    '.ico': 'image/x-icon',
    '.ttf': 'font/ttf',
    '.woff': 'font/woff',
    '.woff2': 'font/woff2',
    '.eot': 'application/vnd.ms-fontobject',
    '.otf': 'font/otf'
};

// 创建HTTP服务器
const server = http.createServer((req, res) => {
    console.log(`请求: ${req.method} ${req.url}`);

    // 处理URL，默认为index.html
    let filePath = '.' + req.url;
    if (filePath === './') {
        filePath = './index.html';
    }

    // 处理404页面
    if (req.url === '/404') {
        filePath = './404.html';
    }

    // 获取文件扩展名
    const extname = path.extname(filePath).toLowerCase();

    // 设置内容类型
    const contentType = MIME_TYPES[extname] || 'application/octet-stream';

    // 读取文件
    fs.readFile(filePath, (err, content) => {
        if (err) {
            if (err.code === 'ENOENT') {
                // 文件不存在，返回404
                fs.readFile('./404.html', (err, content) => {
                    if (err) {
                        // 如果404页面也不存在，返回简单的404消息
                        res.writeHead(404, { 'Content-Type': 'text/html' });
                        res.end('<html><body><h1>404 - 页面不存在</h1></body></html>');
                    } else {
                        res.writeHead(404, { 'Content-Type': 'text/html' });
                        res.end(content);
                    }
                });
            } else {
                // 服务器错误
                res.writeHead(500);
                res.end(`服务器错误: ${err.code}`);
            }
        } else {
            // 成功响应
            res.writeHead(200, { 'Content-Type': contentType });
            res.end(content);
        }
    });
});



// 获取本机IP地址
function getLocalIPs() {
    const interfaces = os.networkInterfaces();
    const addresses = [];

    for (const interfaceName in interfaces) {
        const interfaceInfo = interfaces[interfaceName];
        for (const info of interfaceInfo) {
            // 只获取IPv4地址且非内部地址
            if (info.family === 'IPv4' && !info.internal) {
                addresses.push(info.address);
            }
        }
    }
    return addresses;
}



// 启动服务器
server.listen(PORT, () => {
    const localIPs = getLocalIPs();
    console.log(`服务器运行在: http://localhost:${PORT}`);
    console.log('局域网访问地址:');
    localIPs.forEach(ip => {
        console.log(`http://${ip}:${PORT}`);
    });
});


